<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // es6的class类 class是一个关键字  他用于构造一个函数

    // class Star{
    //     // constructor他是一个构造器 只要有new  他就会立即调用
    //     constructor(names,ages){
           
    //         this.name = names
    //         this.age = ages
    //         this.eat = function(){
    //             console.log('我要吃饭');
    //         }
    //         console.log(this);//在class类中this执行实例化出来的对象
    //     }
    //     sing(){
    //         console.log('我会唱歌');
    //     }
    // }
    // let s = new Star('刘德华',30)
    // console.log(s);
    // s.sing()//sing方法在对象的原型上 原型上的方法所有的实例都可以共享
    // s.eat()//实例上的方法


    // es6中class类实现继承  extends
    //  先定义一个父类
    class Father{
        constructor(house,money){
            this.house = house
            this.money = money
            this.jump = function(){
                console.log('我是父类的方法，跳一跳');
            }
        }
        play(){
            console.log('父类原型上的方法,打儿子');
        }
    }
    // let f = new Father('大别墅','一个亿')
    // console.log(f);

    // 子类继承父类
    class Son extends Father{
        constructor(house,money){
            // console.log(this);
            // super  可以更改this的指向，而且可以复制父类的方法和属性
           super()//在访问this之前一定要先调用super 他就是用来复制父类的方法
          
           this.house = house
           this.money = money
           console.log(this);//son   Father.prototype.constructor.call(this)
           this.eat = function(){
            console.log('我是自己的方法');
           }

        }
        sleep(){
            console.log('我是Son原型上的方法');
        }
    }
    let f = new Father('大别墅','一个亿')
    console.log(f);
    let son = new Son('大别墅','一个亿')
    console.log(son);



</script>
</html>